﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Xml.Serialization;
using System.IO;

namespace Integra {
    public partial class FormAltaModificacion : Form {
        public FormAltaModificacion() {
            InitializeComponent();
            cmbColor.SelectedIndex = 0;
            optProducto_CheckedChanged(this, new EventArgs());
        }

        private void button1_Click(object sender, EventArgs e) {
            string nombre_archivo;
            object p;
            XmlSerializer x;

            if (optProducto.Checked) {
                nombre_archivo = @"Productos\" + txtId.Text;

                Producto producto = new Producto();

                if (File.Exists(nombre_archivo)) {
                    MessageBox.Show("Ya existe un producto con ese id");
                    txtId.Focus();
                    return;
                }

                try {
                    producto.Id = int.Parse(txtId.Text);
                    if (producto.Id <= 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor del ID debe ser numérico mayor que 0");
                    txtId.Focus();
                    return;
                }
                if (txtNombre.Text == "") {
                    MessageBox.Show("El NOMBRE no puede ser vacío");
                    txtNombre.Focus();
                    return;
                }
                producto.Nombre = txtNombre.Text;
                producto.Descripcion = txtDescripcion.Text;
                try {
                    producto.Peso = double.Parse(txtPeso.Text);
                    if (producto.Peso < 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor del PESO debe ser numérico mayor o igual que 0");
                    txtPeso.Focus();
                    return;
                }
                producto.Empaque = txtEmpaque.Text;
                producto.Color = cmbColor.Text;
                try {
                    producto.Tamaño = double.Parse(txtTamano.Text);
                    if (producto.Tamaño < 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor del TAMAÑO debe ser numérico mayor o igual que 0");
                    txtTamano.Focus();
                    return;
                }
                try {
                    producto.Precio = double.Parse(txtPrecio.Text);
                    if (producto.Precio < 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor del PRECIO debe ser numérico mayor o igual que 0");
                    txtPrecio.Focus();
                    return;
                }
                try {
                    producto.Descuento = double.Parse(txtDescuentos.Text);
                    if (producto.Descuento < 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor del DESCUENTO debe ser numérico mayor o igual que 0");
                    txtDescuentos.Focus();
                    return;
                }
                try {
                    producto.Impuestos = double.Parse(txtImpuestos.Text);
                    if (producto.Impuestos < 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor de los IMPUESTOS debe ser numérico mayor o igual que 0");
                    txtImpuestos.Focus();
                    return;
                }

                x = new XmlSerializer(producto.GetType());
                p = producto;
           } else {
                nombre_archivo = @"Servicios\" + txtId.Text;

                Servicio servicio = new Servicio();

                if (File.Exists(nombre_archivo)) {
                    MessageBox.Show("Ya existe un servicio con ese id");
                    txtId.Focus();
                    return;
                }

                try {
                    servicio.Id = int.Parse(txtId.Text);
                    if (servicio.Id <= 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor del ID debe ser numérico mayor que 0");
                    txtId.Focus();
                    return;
                }
                if (txtNombre.Text == "") {
                    MessageBox.Show("El NOMBRE no puede ser vacío");
                    txtNombre.Focus();
                    return;
                }
                servicio.Nombre = txtNombre.Text;
                servicio.Descripcion = txtDescripcion.Text;
                try {
                    servicio.Precio = double.Parse(txtPrecio.Text);
                    if (servicio.Precio < 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor del PRECIO debe ser numérico mayor o igual que 0");
                    txtPrecio.Focus();
                    return;
                }
                try {
                    servicio.Descuento = double.Parse(txtDescuentos.Text);
                    if (servicio.Descuento < 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor del DESCUENTO debe ser numérico mayor o igual que 0");
                    txtDescuentos.Focus();
                    return;
                }
                try {
                    servicio.Impuestos = double.Parse(txtImpuestos.Text);
                    if (servicio.Impuestos < 0)
                        throw new Exception();
                } catch {
                    MessageBox.Show("El valor de los IMPUESTOS debe ser numérico mayor o igual que 0");
                    txtImpuestos.Focus();
                    return;
                }

                x = new XmlSerializer(servicio.GetType());
                p = servicio;
            }

            DialogResult res = MessageBox.Show("¿Confirma el alta?", "¡Atención!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
            if (res == DialogResult.No) this.Close();

            using (TextWriter tw = new StreamWriter(nombre_archivo, false)) {
                x.Serialize(tw, p);

                txtId.Text = "";
                txtNombre.Text = "";
                txtDescripcion.Text = "";
                txtEmpaque.Text = "";
                txtPeso.Text = "";
                txtTamano.Text = "";
                txtPrecio.Text = "";
                txtDescuentos.Text = "";
                txtImpuestos.Text = "";

                txtId.Focus();
            }
        }

        private void eventoKeyDown(object sender, KeyEventArgs e) {
            if (e.KeyCode == Keys.Return) {
                SendKeys.Send("{Tab}");
            }
        }

        private void optProducto_CheckedChanged(object sender, EventArgs e) {
            txtEmpaque.Enabled = optProducto.Checked;
            txtPeso.Enabled = optProducto.Checked;
            txtTamano.Enabled = optProducto.Checked;
            cmbColor.Enabled = optProducto.Checked;
            validarID();
        }

        private void txtId_TextChanged(object sender, EventArgs e) {
            validarID();
        }

        private void validarID() {
            if (txtId.Text == "") {
                label12.Text = "Ingreso obligatorio";
                label12.ForeColor = Color.Red;
            } else {
                try {
                    int id = int.Parse(txtId.Text);
                    if (id <= 0)
                        throw new Exception();
                } catch {
                    label12.Text = "El id debe ser numérico mayor que 0";
                    return;
                }
                try {
                    string nombre_archivo;

                    if (optProducto.Checked) {
                        nombre_archivo = @"Productos\" + txtId.Text;
                    } else {
                        nombre_archivo = @"Servicios\" + txtId.Text;
                    }

                    if (File.Exists(nombre_archivo)) {
                        label12.Text = "Ya existe un item con ese id";
                        label12.ForeColor = Color.Red;
                    } else {
                        label12.Text = "Correcto";
                        label12.ForeColor = Color.Green;
                    }
                } catch {
                    label12.Text = "Error";
                    label12.ForeColor = Color.Red;
                }
            }
        }

        private void button2_Click(object sender, EventArgs e) {
            this.Close();
        }
    }
}
